package com.lagou.edu.utils;

import com.alibaba.druid.util.TransactionInfo;

import java.sql.SQLException;

/**
 * @className: TransactionManager
 * @Description: TODO
 * @author: Huangjianyun
 * @date: 2022/3/21 23:03
 */
//封装事务管理工具类 否则手动事务开启 提交  回滚
public class TransactionManager {

    private ConnectionUtils connectionUtils;
//    private TransactionManager(){
//
//    }

    public void setConnectionUtils(ConnectionUtils connectionUtils) {
        this.connectionUtils = connectionUtils;
    }

//    private static  TransactionManager transactionManager = new TransactionManager();
    //提供一个对外暴露实例对象方法
//    public  static TransactionManager getInstance(){
//        return transactionManager;
//    }
    //开启事务方法
    public void beginTransaction() throws SQLException {
        //开启事务（事务和连接对象有关，所以获取当前线程中的连接对象） 业务逻辑方法执行之前 而开启时事务进行手动提交事务，关闭自动提交事务功能，默认开启自动提交事务
        //这里关闭自动提交事务 ，手动控制事务
        //ConnectionUtils.getInstance().getCurrentThreadConn().setAutoCommit(false);
        connectionUtils.getCurrentThreadConn().setAutoCommit(false);
    }
    //手动提交事务
    public  void commit() throws SQLException {
        //提交事务 获取当前线程连接对象 进行调用commit()手动提交事务（连接工具类设置单例模式 工具类都是同一个连接工具类对象）
        //ConnectionUtils.getInstance().getCurrentThreadConn().commit();
        connectionUtils.getCurrentThreadConn().commit();
    }
    //回滚事务
    public void rollback() throws SQLException {
        //出现异常， 执行事务回滚 获取当前线程连接对象
        //ConnectionUtils.getInstance().getCurrentThreadConn().rollback();
        connectionUtils.getCurrentThreadConn().rollback();
    }
}
